]> dgit.raspbian.org Git - puma.git/commitdiff
puma (5.6.5-3+deb12u2) bookworm-security; urgency=high
authorAbhijith PA <abhijith@debian.org>
Mon, 5 Oct 2026 04:40:12 +0000 (10:10 +0530)
committerAbhijith PA <abhijith@debian.org>
Mon, 5 Oct 2026 04:40:12 +0000 (10:10 +0530)
  * Non-maintainer upload by the Debian LTS Team.
  * Fix CVE-2026-47736, CVE-2026-47737.
  * Refresh ssl certs for the tests

[dgit import unpatched puma 5.6.5-3+deb12u2]

31 files changed:
1  2 
debian/README.source
debian/changelog
debian/clean
debian/control
debian/copyright
debian/gbp.conf
debian/patches/0004-puma.gemspec-drop-git-usage.patch
debian/patches/0011-disable-minitest-extensions.patch
debian/patches/0012-disable-cli-ssl-tests.patch
debian/patches/0013-fix-test-term-not-accepts-new-connections.patch
debian/patches/0014-disable-test-failing-on-amd64.patch
debian/patches/CVE-2023-40175.patch
debian/patches/CVE-2024-21647.patch
debian/patches/CVE-2024-45614.patch
debian/patches/CVE-2026-47736_37.patch
debian/patches/new-certs-generated.patch
debian/patches/series
debian/puma.1
debian/puma.docs
debian/puma.examples
debian/puma.lintian-overrides
debian/puma.manpages
debian/pumactl.1
debian/ruby-tests.rake
debian/rules
debian/salsa-ci.yml
debian/source/format
debian/source/lintian-overrides
debian/tests/control
debian/upstream/metadata
debian/watch

index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..620cda36936da1bf8a4823bdd92b53f3c3ca0008
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,14 @@@
++puma (4.3.1-1)
++
++  Several tests have been disabled by default:
++
++  - test/test_puma_server_ssl.rb has been disabled because all tests fail
++    randomly. However these tests have never been performed in puma 3.x and
++    they also work randomly. So until someone can look into them and fix them,
++    we decided to not run them (see also #921931).
++
++  - test_control_for_ssl (test/test_cli.rb) and
++    test_control_ssl (test/test_pumactl.rb) show similar issues and don't seem
++    to imply that the package fails to work. So they have been disabled too.
++
++ -- Daniel Leidert <dleidert@debian.org>  Wed, 05 Feb 2020 23:51:51 +0100
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b0ff7f69b8fe2bfd70085fda4219adf62aede575
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,308 @@@
++puma (5.6.5-3+deb12u2) bookworm-security; urgency=high
++
++  * Non-maintainer upload by the Debian LTS Team.
++  * Fix CVE-2026-47736, CVE-2026-47737.
++  * Refresh ssl certs for the tests
++
++ -- Abhijith PA <abhijith@debian.org>  Mon, 05 Oct 2026 10:10:12 +0530
++
++puma (5.6.5-3+deb12u1) bookworm; urgency=medium
++
++  * Team upload
++  * d/patches/
++   + CVE-2023-40175.patch: Fix CVE-2023-40175, incorrect behavior when
++     parsing chunked transfer encoding bodies and zero-length
++     Content-Length headers in a way that allowed HTTP request
++     smuggling. (Closes: #1050079)
++
++   + CVE-2024-21647.patch: Fix CVE-2024-21647 by limiting the size of
++     chunk extensions. (Closes: #1060345)
++
++   + CVE-2024-45614.patch: Fix CVE-2024-45614, clients could clobber
++     values set by intermediate proxies (such as X-Forwarded-For) by
++     providing a underscore version of the same header.
++     (Closes: #1082379)
++
++ -- Abhijith PA <abhijith@debian.org>  Wed, 29 Jan 2025 07:26:33 +0530
++
++puma (5.6.5-3) unstable; urgency=medium
++
++  * Team upload.
++  * d/control (Vcs-Git): Fix URL.
++
++ -- Daniel Leidert <dleidert@debian.org>  Thu, 09 Feb 2023 16:24:05 +0100
++
++puma (5.6.5-2) unstable; urgency=medium
++
++  * debian/ruby-tests.rake: skip test that fails often (Closes: #1006022)
++  * debian/ruby-tests.rake: exclude tests that fail often but not always
++
++ -- Antonio Terceiro <terceiro@debian.org>  Wed, 02 Nov 2022 09:26:37 -0300
++
++puma (5.6.5-1) unstable; urgency=medium
++
++  * Update watch file for github.com pattern change
++  * New upstream version 5.6.5
++  * Refresh patches
++  * Bump Standards-Version to 4.6.1 (no changes needed)
++
++ -- Pirate Praveen <praveen@debian.org>  Sun, 16 Oct 2022 22:44:46 +0530
++
++puma (5.6.4-1) unstable; urgency=medium
++
++  * New upstream version 5.6.4
++  * Refresh patches
++  * Disable some tests that fail with 
++     NameError: uninitialized constant Puma::LogWriter
++  * Remove tmp/restart.txt in clean
++
++ -- Pirate Praveen <praveen@debian.org>  Mon, 04 Apr 2022 13:24:10 +0530
++
++puma (5.5.2-2) unstable; urgency=medium
++
++  * Team upload
++  * debian/rules: force an UTF-8 locale
++  * debian/ruby-tests.rake: wrap lines
++  * debian/ruby-tests.rake: run all ssl tests on autopkgtest only
++  * debian/test/control: give ssl test a name
++
++ -- Antonio Terceiro <terceiro@debian.org>  Tue, 02 Nov 2021 16:35:12 -0300
++
++puma (5.5.2-1) unstable; urgency=medium
++
++  * Team upload
++  * New upstream version 5.5.2
++    - Builds and tests fine again (Closes: #998295)
++  * Add build-dependency on ruby-localhost
++  * debian/rules: exclude several unnecessary files from installation
++
++ -- Antonio Terceiro <terceiro@debian.org>  Tue, 02 Nov 2021 14:39:10 -0300
++
++puma (5.3.2-3) unstable; urgency=medium
++
++  * Use --gem-install layout option of dh-ruby
++
++ -- Pirate Praveen <praveen@debian.org>  Tue, 12 Oct 2021 02:24:33 +0530
++
++puma (5.3.2-2) unstable; urgency=medium
++
++  * Reupload to unstable
++  * Bump Standards-Version to 4.6.0 (no changes needed)
++  * Bump debhelper compatibility level to 13
++
++ -- Pirate Praveen <praveen@debian.org>  Mon, 11 Oct 2021 03:17:23 +0530
++
++puma (5.3.2-1) experimental; urgency=medium
++
++  * New upstream version 5.3.2 (Closes: #989054) (Fixes: CVE-2021-29509)
++  * Refresh patches
++
++ -- Pirate Praveen <praveen@debian.org>  Fri, 28 May 2021 22:34:53 +0530
++
++puma (4.3.8-1) unstable; urgency=medium
++
++  * New upstream version 4.3.8 (Closes: #989054) (Fixes: CVE-2021-29509)
++
++ -- Pirate Praveen <praveen@debian.org>  Wed, 26 May 2021 10:24:19 +0530
++
++puma (5.2.2-2) experimental; urgency=medium
++
++  * Disable test that failied on amd64 buildd
++
++ -- Pirate Praveen <praveen@debian.org>  Mon, 08 Mar 2021 23:03:52 +0530
++
++puma (5.2.2-1) experimental; urgency=medium
++
++  * New upstream version 5.2.2
++  * Bump Standards-Version to 4.5.1 (no changes needed)
++  * Refresh patches for new upstream release
++  * Add ruby-minitest-stub-const as build dependency
++  * Disable failing tests
++
++ -- Pirate Praveen <praveen@debian.org>  Sun, 07 Mar 2021 21:03:52 +0530
++
++puma (4.3.6-1) unstable; urgency=medium
++
++  * Team upload.
++  * New upstream version.
++    - Fixes CVE-2020-11076 and CVE-2020-11077 (closes: #972102).
++  * d/copyright: Minor update.
++  * d/puma.lintian-overrides: Add package override.
++  * d/ruby-tests.rake: Add logic to run SSL test.
++  * d/patches/*.patch: Add missing headers and refresh.
++  * d/source/lintian-overrides: Add source override.
++  * d/tests/control: Set environment variable to run the SSL tests separately
++    (similar to the solution used in the jekyll package).
++  * d/tests/test-puma-server-ssl*: Removed.
++
++ -- Daniel Leidert <dleidert@debian.org>  Thu, 15 Oct 2020 20:57:29 +0200
++
++puma (4.3.3-3) unstable; urgency=medium
++
++  * Include patch from gitlab to improve performance
++
++ -- Pirate Praveen <praveen@debian.org>  Tue, 18 Aug 2020 00:15:20 +0530
++
++puma (4.3.3-2) unstable; urgency=medium
++
++  [ Daniel Leidert ]
++  * debian/tests/test_puma_server_ssl,
++    debian/tests/test_puma_server_ssl.rake: Run test/test_puma_server_ssl.rb
++    in an openssl enviroment not using the Debian defaults.
++  * debian/tests/control: Add new test.
++
++  [ Debian Janitor ]
++  * Set field Upstream-Contact in debian/copyright.
++  * Remove obsolete fields Contact, Name from debian/upstream/metadata
++    (already present in machine-readable debian/copyright).
++
++  [ Pirate Praveen ]
++  * Remove debian-branch option from debian/gbp.conf
++  * Reupload to unstable
++
++ -- Pirate Praveen <praveen@debian.org>  Mon, 03 Aug 2020 15:37:16 +0530
++
++puma (4.3.3-1) experimental; urgency=medium
++
++  * Team upload.
++  * New upstream release.
++    - Fixes CVE-2020-5247 (closes: #952766).
++    - Fixes CVE-2020-5249 (closes: #953122).
++  * d/control (Section): Change to web.
++    (Vcs-Git): Indicate branch name via -b debian/experimental.
++    (Homepage): Use secure URL.
++    (Depends): Use ${ruby:Depends}.
++  * d/copyright (Source): Use secure URL.
++  * d/rules: Add override to install upstream changelog.
++  * d/watch: Use package name for tarball.
++
++ -- Daniel Leidert <dleidert@debian.org>  Thu, 05 Mar 2020 01:34:17 +0100
++
++puma (4.3.1-1) experimental; urgency=medium
++
++  * Team upload.
++  * New upstream release
++    - Fixes CVE-2019-16770 Keepalive thread overload/DoS (closes: #946312).
++  * d/control (Rules-Requires-Root): Set to binary-targets.
++    (Build-Depends, Depends): Add ruby-nio4r.
++    (Build-Depends): Add curl for test/test_integration_single.rb.
++  * d/ruby-tests.rake: Disable test/test_puma_server_ssl.rb.
++  * d/README.source: Add to explain tests which have been disabled.
++  * d/patches/0004-puma.gemspec-drop-git-usage.patch: Refresh patch.
++  * d/patches/0011-disable-minitest-extensions.patch: Add patch.
++    - Disable unavailable minitest extensions (retry and proveit).
++  * d/patches/0012-disable-cli-ssl-tests.patch: Add patch.
++    - Disable CLI SSL tests.
++  * d/patches/0013-fix-test-term-not-accepts-new-connections.patch: Add.
++    - Fix test_term_not_accepts_new_connections to be locale independent.
++  * d/patches/0002-test_integration-disable-test-that-fails-randomly.patch,
++    d/patches/0003-test_cli-disable-test-that-rails-randomly.patch,
++    d/patches/0005-test_puma_server-disable-test-that-fails-randomly.patch,
++    d/patches/0006-test-helper.rb-drop-bundler-usage.patch,
++    d/patches/0007-test-test_cli.rb-disable-test-that-fails-randomly.patch,
++    d/patches/0008-fix-ssl-tests.patch,
++    d/patches/0009-disable-tests-failing-in-single-cpu.patch,
++    d/patches/0010-fix-cluster-exit-for-ruby27.patch: Remove obsolete patches.
++  * d/patches/series: Adjust.
++
++ -- Daniel Leidert <dleidert@debian.org>  Thu, 06 Feb 2020 11:45:11 +0100
++
++puma (3.12.4-1) unstable; urgency=medium
++
++  * Team upload.
++  * New upstream release.
++    - Fixes CVE-2020-5247 (closes: #952766).
++    - Fixes CVE-2020-5249 (closes: #953122).
++  * d/control (Section): Changed to web.
++    (Homepage): Use secure URL.
++    (Depends): Add ${ruby:Depends}.
++  * d/copyright (Source): Use secure URL.
++  * d/ruby-tests.rake: Disable test/test_puma_server_ssl.rb for the moment.
++    These tests fail due to openssl being configured to use SECLEVEL2
++    (https://github.com/puma/puma/issues/2147).
++  * d/rules: Add override to install upstream changelog.
++  * d/watch: Rename downloaded tarball to include package name.
++  * d/patches/0008-fix-ssl-tests.patch: Remove patch. Applied upstream.
++  * d/patches/CVE-2019-16770.patch: Ditto.
++  * d/patches/*.patch: Refresh patches.
++  * d/patches/series: Adjust.
++
++ -- Daniel Leidert <dleidert@debian.org>  Wed, 04 Mar 2020 23:09:16 +0100
++
++puma (3.12.0-4) unstable; urgency=medium
++
++  * Team upload.
++  * d/control (Rules-Requires-Root): Set to binary-targets.
++  * d/patches/0011-disable-minitest-extensions.patch: Add patch.
++    - Disable unavailable minitest retry extension.
++  * d/patches/CVE-2019-16770.patch: Add patch.
++    - Backport fix for CVE-2019-16770 from upstream (closes: #946312).
++  * d/patches/series: Add patch.
++
++ -- Daniel Leidert <dleidert@debian.org>  Thu, 06 Feb 2020 12:54:59 +0100
++
++puma (3.12.0-3) unstable; urgency=medium
++
++  * Team upload.
++  * d/compat: Remove obsolete file.
++  * d/control: Add Rules-Requires-Root field.
++    (Build-Depends): Use debhelper-compat.
++    (Standards-Version): Bump to 4.5.0.
++    (Depends): Drop ruby-interpreter.
++  * d/copyright (Format): Fix insecure-copyright-format-uri and add myself.
++  * d/puma.1, d/pumactl.1: Add manual pages.
++  * d/puma.manpages: Install manual pages.
++  * d/ruby-tests.rake: Set verbose mode.
++  * d/patches/0010-fix-cluster-exit-for-ruby27.patch: Add patch.
++    - Fix hang with Ruby >= 2.6 when shutting down workers.
++  * d/patches/series: Enable new patch.
++  * d/upstream/metadata: Add metadata.
++  * d/upstream/metadata: Add metadata.
++
++ -- Daniel Leidert <dleidert@debian.org>  Wed, 05 Feb 2020 18:20:58 +0100
++
++puma (3.12.0-2) unstable; urgency=medium
++
++  * Disable tests failing in single cpu (Closes: #921931)
++
++ -- Pirate Praveen <praveen@debian.org>  Sun, 10 Feb 2019 18:56:47 +0530
++
++puma (3.12.0-1) unstable; urgency=medium
++
++  [ Balint Reczey ]
++  * New upstream version 3.12.0
++  * Refresh patches
++
++  [ Pirate Praveen ]
++  * Fix OpenSSL 1.1.1 test failures with upstream patch (Closes: #900156)
++  * Bump Standards-Version to 4.3.0 (no changes needed)
++  * Add myself to uploaders
++
++ -- Pirate Praveen <praveen@debian.org>  Sun, 10 Feb 2019 10:56:59 +0530
++
++puma (3.11.3-1) unstable; urgency=medium
++
++  * Team upload
++  * Remove myself from Uploaders:
++  * New upstream version 3.11.3
++  * Build against libssl-dev instead of libssl1.0-dev (Closes: #859542)
++  * Refresh packaging files with `dh-make-ruby -wo .`
++    * Bump debhelper compat to 11
++    * Change Vcs-* to point to salsa.debian.org
++    * Use standard debian/ruby-tests.rake
++      * drop build-dependency on ruby-hoe
++  * Refresh patches
++  * New patches:
++    - 0006-test-helper.rb-drop-bundler-usage.patch
++    - 0007-test-test_cli.rb-disable-test-that-fails-randomly.patch
++  * Replace 0001-test_puma_server_ssl-update-for-newer-versions-of-Op.patch
++    with 0001-test_puma_server_ssl-disable-test-that-takes-too-lon.patch
++
++
++ -- Antonio Terceiro <terceiro@debian.org>  Wed, 28 Mar 2018 18:53:22 -0300
++
++puma (3.6.0-1) unstable; urgency=medium
++
++  * Initial release (Closes: #720336)
++
++ -- Antonio Terceiro <terceiro@debian.org>  Thu, 10 Nov 2016 16:47:06 -0200
diff --cc debian/clean
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..45351253f956527ac039880f7b06f3b88c22d6fd
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++tmp/restart.txt
diff --cc debian/control
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..84a0183cd06d95e6acdefa9c281a004e3d1c428d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,30 @@@
++Source: puma
++Section: web
++Priority: optional
++Maintainer: Debian Ruby Team <pkg-ruby-extras-maintainers@lists.alioth.debian.org>
++Uploaders: Pirate Praveen <praveen@debian.org>
++Build-Depends: curl,
++               debhelper-compat (= 13),
++               gem2deb (>= 1.6),
++               libssl-dev,
++               rake,
++               ruby-localhost,
++               ruby-nio4r (>= 2),
++               ruby-rack (<< 3),
++               ruby-minitest-stub-const
++Standards-Version: 4.6.1
++Vcs-Git: https://salsa.debian.org/ruby-team/puma.git
++Vcs-Browser: https://salsa.debian.org/ruby-team/puma
++Homepage: https://puma.io
++Testsuite: autopkgtest-pkg-ruby
++XS-Ruby-Versions: all
++Rules-Requires-Root: binary-targets
++
++Package: puma
++Architecture: any
++XB-Ruby-Versions: ${ruby:Versions}
++Depends: ruby, ${misc:Depends}, ${ruby:Depends}, ${shlibs:Depends}
++Description: threaded HTTP 1.1 server for Ruby/Rack applications
++ Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
++ Ruby/Rack applications. Puma is intended for use in both development and
++ production environments.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..32ce732f44f74918feb6b7e7b74043b1c02121b3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,41 @@@
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: puma
++Upstream-Contact: https://github.com/puma/puma/issues
++Source: https://github.com/puma/puma
++
++Files: *
++Copyright: 2005, Zed Shaw
++           2011, Evan Phoenix
++License: BSD-3-clause
++
++Files: debian/*
++Copyright: 2016 Antonio Terceiro <terceiro@debian.org>
++           2020 Daniel Leidert <dleidert@debian.org>
++License: BSD-3-clause
++Comment: The Debian packaging is licensed under the same terms as the source.
++
++License: BSD-3-clause
++ All rights reserved.
++ .
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions are met:
++ .
++ * Redistributions of source code must retain the above copyright notice, this
++   list of conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright notice
++   this list of conditions and the following disclaimer in the documentation
++   and/or other materials provided with the distribution.
++ * Neither the name of the Evan Phoenix nor the names of its contributors
++   may be used to endorse or promote products derived from this software
++   without specific prior written permission.
++ .
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
++ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --cc debian/gbp.conf
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..51fd1ac07d3af1b053c2c43ba4b604ee80c06057
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++[DEFAULT]
++pristine-tar = true
++verbose = true
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d5f0d7cd98ca8611fa65a72455cde41e57458577
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,21 @@@
++From: Antonio Terceiro <terceiro@softwarelivre.org>
++Date: Wed, 5 Feb 2020 21:36:05 +0100
++Subject: Drop git usage from gemspec
++
++Forwarded: not-needed
++---
++ puma.gemspec | 3 +--
++ 1 file changed, 1 insertion(+), 2 deletions(-)
++
++--- a/puma.gemspec
+++++ b/puma.gemspec
++@@ -13,8 +13,7 @@
++   if RbConfig::CONFIG['ruby_version'] >= '2.5'
++     s.metadata["msys2_mingw_dependencies"] = "openssl"
++   end
++-  s.files = `git ls-files -- bin docs ext lib tools`.split("\n") +
++-            %w[History.md LICENSE README.md]
+++  s.files = Dir.glob('**/*').reject { |f| f =~ /^debian\//}
++   s.homepage = "https://puma.io"
++ 
++   if s.respond_to?(:metadata=)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6548af725f0e2ae3c0f416d0f94a3cc54373f515
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,39 @@@
++From: Daniel Leidert <daniel.leidert@wgdd.de>
++Date: Wed, 5 Feb 2020 22:20:42 +0100
++Subject: Disable unavailable minitest extensions
++
++Forwarded: not-needed
++---
++ test/helper.rb | 8 ++++----
++ 1 file changed, 4 insertions(+), 4 deletions(-)
++
++--- a/test/helper.rb
+++++ b/test/helper.rb
++@@ -14,7 +14,6 @@
++ require_relative "minitest/verbose"
++ require "minitest/autorun"
++ require "minitest/pride"
++-require "minitest/proveit"
++ require "minitest/stub_const"
++ require "net/http"
++ require_relative "helpers/apps"
++@@ -102,10 +101,6 @@
++ end
++ 
++ Minitest::Test.prepend TimeoutEveryTestCase
++-if ENV['CI']
++-  require 'minitest/retry'
++-  Minitest::Retry.use!
++-end
++ 
++ module TestSkips
++ 
++@@ -178,7 +173,7 @@
++   REPO_NAME = ENV['GITHUB_REPOSITORY'] ? ENV['GITHUB_REPOSITORY'][/[^\/]+\z/] : 'puma'
++ 
++   def self.run(reporter, options = {}) # :nodoc:
++-    prove_it!
+++    #prove_it!
++     super
++   end
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1be1cd9f0361201c8a6fef1c87ab90b67c0aae32
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,21 @@@
++From: Daniel Leidert <daniel.leidert@wgdd.de>
++Date: Wed, 5 Feb 2020 23:18:37 +0100
++Subject: Disable cli ssl tests
++
++Forwarded: not-needed
++---
++ test/test_cli.rb     | 2 +-
++ test/test_pumactl.rb | 2 +-
++ 2 files changed, 2 insertions(+), 2 deletions(-)
++
++--- a/test/test_pumactl.rb
+++++ b/test/test_pumactl.rb
++@@ -223,7 +223,7 @@
++     refute_includes log, 'send_request'
++   end
++ 
++-  def test_control_ssl
+++  def __test_control_ssl
++     skip_unless :ssl
++ 
++     host = "127.0.0.1"
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..9dae6b641221dfe45ce869d28590b8d35d5ec405
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,20 @@@
++From: Daniel Leidert <daniel.leidert@wgdd.de>
++Date: Thu, 6 Feb 2020 11:24:24 +0100
++Subject: Fix test to read output locale independent
++
++The test fails if run in a non-English environment.
++---
++ test/test_integration_single.rb | 2 +-
++ 1 file changed, 1 insertion(+), 1 deletion(-)
++
++--- a/test/test_integration_single.rb
+++++ b/test/test_integration_single.rb
++@@ -76,7 +76,7 @@
++     true while @server.gets !~ /Gracefully stopping/ # wait for server to begin graceful shutdown
++ 
++     # Invoke a request which must be rejected
++-    _stdin, _stdout, rejected_curl_stderr, rejected_curl_wait_thread = Open3.popen3("curl #{HOST}:#{@tcp_port}")
+++    _stdin, _stdout, rejected_curl_stderr, rejected_curl_wait_thread = Open3.popen3({ "LC_ALL" => "C" }, "curl http://#{HOST}:#{@tcp_port}")
++ 
++     assert nil != Process.getpgid(@server.pid) # ensure server is still running
++     assert nil != Process.getpgid(curl_wait_thread[:pid]) # ensure first curl invocation still in progress
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..196e878f8159f62fb549cc3d6cce2a77f0aa016e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,14 @@@
++This test failed on amd64 buildd
++https://buildd.debian.org/status/fetch.php?pkg=puma&arch=amd64&ver=5.2.2-1&stamp=1615133735&raw=0
++
++--- a/test/test_puma_server.rb
+++++ b/test/test_puma_server.rb
++@@ -1294,7 +1294,7 @@
++     end
++   end
++ 
++-  def test_command_ignored_before_run
+++  def __test_command_ignored_before_run
++     @server.stop # ignored
++     @server.run
++     @server.halt
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..be9cff845a7c5f46bd5e4cadfbeed3c14b61bad0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,143 @@@
++From 7405a219801dcebc0ad6e0aa108d4319ca23f662 Mon Sep 17 00:00:00 2001
++From: Nate Berkopec <nate.berkopec@gmail.com>
++Date: Fri, 18 Aug 2023 09:47:23 +0900
++Subject: [PATCH] Merge pull request from GHSA-68xg-gqqm-vgj8
++
++* Reject empty string for Content-Length
++
++* Ignore trailers in last chunk
++
++* test_puma_server.rb - use heredoc, test_cl_and_te_smuggle
++
++* client.rb - stye/RubyCop
++
++* test_puma_server.rb - indented heredoc rubocop disable
++
++* Dentarg comments
++
++* Remove unused variable
++
++---------
++
++Co-authored-by: MSP-Greg <Greg.mpls@gmail.com>
++---
++ lib/puma/client.rb       | 23 ++++++++++++++--------
++ test/test_puma_server.rb | 42 +++++++++++++++++++++++++++++++++++++++-
++ 2 files changed, 56 insertions(+), 9 deletions(-)
++
++diff --git a/lib/puma/client.rb b/lib/puma/client.rb
++index e966f995e8..9c11912caa 100644
++--- a/lib/puma/client.rb
+++++ b/lib/puma/client.rb
++@@ -45,7 +45,8 @@ class Client
++ 
++     # chunked body validation
++     CHUNK_SIZE_INVALID = /[^\h]/.freeze
++-    CHUNK_VALID_ENDING = "\r\n".freeze
+++    CHUNK_VALID_ENDING = Const::LINE_END
+++    CHUNK_VALID_ENDING_SIZE = CHUNK_VALID_ENDING.bytesize
++ 
++     # Content-Length header value validation
++     CONTENT_LENGTH_VALUE_INVALID = /[^\d]/.freeze
++@@ -347,8 +348,8 @@ def setup_body
++       cl = @env[CONTENT_LENGTH]
++ 
++       if cl
++-        # cannot contain characters that are not \d
++-        if cl =~ CONTENT_LENGTH_VALUE_INVALID
+++        # cannot contain characters that are not \d, or be empty
+++        if cl =~ CONTENT_LENGTH_VALUE_INVALID || cl.empty?
++           raise HttpParserError, "Invalid Content-Length: #{cl.inspect}"
++         end
++       else
++@@ -509,7 +510,7 @@ def decode_chunk(chunk)
++ 
++       while !io.eof?
++         line = io.gets
++-        if line.end_with?("\r\n")
+++        if line.end_with?(CHUNK_VALID_ENDING)
++           # Puma doesn't process chunk extensions, but should parse if they're
++           # present, which is the reason for the semicolon regex
++           chunk_hex = line.strip[/\A[^;]+/]
++@@ -521,13 +522,19 @@ def decode_chunk(chunk)
++             @in_last_chunk = true
++             @body.rewind
++             rest = io.read
++-            last_crlf_size = "\r\n".bytesize
++-            if rest.bytesize < last_crlf_size
+++            if rest.bytesize < CHUNK_VALID_ENDING_SIZE
++               @buffer = nil
++-              @partial_part_left = last_crlf_size - rest.bytesize
+++              @partial_part_left = CHUNK_VALID_ENDING_SIZE - rest.bytesize
++               return false
++             else
++-              @buffer = rest[last_crlf_size..-1]
+++              # if the next character is a CRLF, set buffer to everything after that CRLF
+++              start_of_rest = if rest.start_with?(CHUNK_VALID_ENDING)
+++                CHUNK_VALID_ENDING_SIZE
+++              else # we have started a trailer section, which we do not support. skip it!
+++                rest.index(CHUNK_VALID_ENDING*2) + CHUNK_VALID_ENDING_SIZE*2
+++              end
+++
+++              @buffer = rest[start_of_rest..-1]
++               @buffer = nil if @buffer.empty?
++               set_ready
++               return true
++diff --git a/test/test_puma_server.rb b/test/test_puma_server.rb
++index 298e44b439..2bfaf98848 100644
++--- a/test/test_puma_server.rb
+++++ b/test/test_puma_server.rb
++@@ -627,7 +627,7 @@ def test_large_chunked_request
++       [200, {}, [""]]
++     }
++ 
++-    header = "GET / HTTP/1.1\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n"
+++    header = "GET / HTTP/1.1\r\nConnection: close\r\nContent-Length: 200\r\nTransfer-Encoding: chunked\r\n\r\n"
++ 
++     chunk_header_size = 6 # 4fb8\r\n
++     # Current implementation reads one chunk of CHUNK_SIZE, then more chunks of size 4096.
++@@ -1365,4 +1365,44 @@ def test_rack_url_scheme_user
++     data = send_http_and_read "GET / HTTP/1.0\r\n\r\n"
++     assert_equal "user", data.split("\r\n").last
++   end
+++
+++  def test_cl_empty_string
+++    server_run do |env|
+++      [200, {}, [""]]
+++    end
+++
+++    empty_cl_request = "GET / HTTP/1.1\r\nHost: localhost\r\nContent-Length:\r\n\r\nGET / HTTP/1.1\r\nHost: localhost\r\n\r\n"
+++
+++    data = send_http_and_read empty_cl_request
+++    assert_operator data, :start_with?, 'HTTP/1.1 400 Bad Request'
+++  end
+++
+++  def test_crlf_trailer_smuggle
+++    server_run do |env|
+++      [200, {}, [""]]
+++    end
+++
+++    smuggled_payload = "GET / HTTP/1.1\r\nTransfer-Encoding: chunked\r\nHost: whatever\r\n\r\n0\r\nX:POST / HTTP/1.1\r\nHost: whatever\r\n\r\nGET / HTTP/1.1\r\nHost: whatever\r\n\r\n"
+++
+++    data = send_http_and_read smuggled_payload
+++    assert_equal 2, data.scan("HTTP/1.1 200 OK").size
+++  end
+++
+++  # test to check if content-length is ignored when 'transfer-encoding: chunked'
+++  # is used.  See also test_large_chunked_request
+++  def test_cl_and_te_smuggle
+++    body = nil
+++    server_run { |env|
+++      body = env['rack.input'].read
+++      [200, {}, [""]]
+++    }
+++
+++    req = "POST /search HTTP/1.1\r\nHost: vulnerable-website.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 4\r\nTransfer-Encoding: chunked\r\n\r\n7b\r\nGET /404 HTTP/1.1\r\nHost: vulnerable-website.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 144\r\n\r\nx=\r\n0\r\n\r\n"
+++
+++    data = send_http_and_read req
+++
+++    assert_includes body, "GET /404 HTTP/1.1\r\n"
+++    assert_includes body, "Content-Length: 144\r\n"
+++    assert_equal 1, data.scan("HTTP/1.1 200 OK").size
+++  end
++ end
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..47e523ec5910e792015c23bb6b264cd3014d1b1e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,93 @@@
++From bbb880ffb6debbfdea535b4b3eb2204d49ae151d Mon Sep 17 00:00:00 2001
++From: Nate Berkopec <nate.berkopec@gmail.com>
++Date: Mon, 8 Jan 2024 14:48:43 +0900
++Subject: [PATCH] Merge pull request from GHSA-c2f4-cvqm-65w2
++
++Co-authored-by: MSP-Greg <MSP-Greg@users.noreply.github.com>
++Co-authored-by: Patrik Ragnarsson <patrik@starkast.net>
++Co-authored-by: Evan Phoenix <evan@phx.io>
++---
++ lib/puma/client.rb       | 27 +++++++++++++++++++++++++++
++ test/test_puma_server.rb | 14 ++++++++++++++
++ 2 files changed, 41 insertions(+)
++
++--- a/lib/puma/client.rb
+++++ b/lib/puma/client.rb
++@@ -48,6 +48,14 @@ module Puma
++     CHUNK_VALID_ENDING = Const::LINE_END
++     CHUNK_VALID_ENDING_SIZE = CHUNK_VALID_ENDING.bytesize
++ 
+++    # The maximum number of bytes we'll buffer looking for a valid
+++    # chunk header.
+++    MAX_CHUNK_HEADER_SIZE = 4096
+++
+++    # The maximum amount of excess data the client sends
+++    # using chunk size extensions before we abort the connection.
+++    MAX_CHUNK_EXCESS = 16 * 1024
+++
++     # Content-Length header value validation
++     CONTENT_LENGTH_VALUE_INVALID = /[^\d]/.freeze
++ 
++@@ -460,6 +468,7 @@ module Puma
++       @chunked_body = true
++       @partial_part_left = 0
++       @prev_chunk = ""
+++      @excess_cr = 0
++ 
++       @body = Tempfile.new(Const::PUMA_TMP_BASE)
++       @body.unlink
++@@ -541,6 +550,20 @@ module Puma
++             end
++           end
++ 
+++          # Track the excess as a function of the size of the
+++          # header vs the size of the actual data. Excess can
+++          # go negative (and is expected to) when the body is
+++          # significant.
+++          # The additional of chunk_hex.size and 2 compensates
+++          # for a client sending 1 byte in a chunked body over
+++          # a long period of time, making sure that that client
+++          # isn't accidentally eventually punished.
+++          @excess_cr += (line.size - len - chunk_hex.size - 2)
+++
+++          if @excess_cr >= MAX_CHUNK_EXCESS
+++            raise HttpParserError, "Maximum chunk excess detected"
+++          end
+++
++           len += 2
++ 
++           part = io.read(len)
++@@ -568,6 +591,10 @@ module Puma
++             @partial_part_left = len - part.size
++           end
++         else
+++          if @prev_chunk.size + chunk.size >= MAX_CHUNK_HEADER_SIZE
+++            raise HttpParserError, "maximum size of chunk header exceeded"
+++          end
+++
++           @prev_chunk = line
++           return false
++         end
++--- a/test/test_puma_server.rb
+++++ b/test/test_puma_server.rb
++@@ -648,6 +648,20 @@ EOF
++     end
++   end
++ 
+++  def test_large_chunked_request_header
+++    server_run(environment: :production) { |env|
+++      [200, {}, [""]]
+++    }
+++
+++    max_chunk_header_size = Puma::Client::MAX_CHUNK_HEADER_SIZE
+++    header = "GET / HTTP/1.1\r\nConnection: close\r\nContent-Length: 200\r\nTransfer-Encoding: chunked\r\n\r\n"
+++    socket = send_http "#{header}1;t#{'x' * (max_chunk_header_size + 2)}"
+++
+++    data = socket.read
+++
+++    assert_match "HTTP/1.1 400 Bad Request\r\n\r\n", data
+++  end
+++
++   def test_chunked_request_pause_before_value
++     body = nil
++     content_length = nil
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b15eb82c01af0a8be6238b3fa0761a712afe263b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,195 @@@
++From cac3fd18cf29ed43719ff5d52d9cfec215f0a043 Mon Sep 17 00:00:00 2001
++From: Evan Phoenix <evan@phx.io>
++Date: Wed, 18 Sep 2024 21:56:07 -0700
++Subject: [PATCH] Merge commit from fork
++
++* Prevent underscores from clobbering hyphen headers
++
++* Special case encoding headers to prevent app confusion
++
++* Handle _ as , in jruby as well
++
++* Silence RuboCop offense
++
++---------
++
++Co-authored-by: Patrik Ragnarsson <patrik@starkast.net>
++---
++ ext/puma_http11/org/jruby/puma/Http11.java |  2 +
++ lib/puma/const.rb                          |  8 +++
++ lib/puma/request.rb                        | 19 ++++++--
++ test/test_normalize.rb                     | 57 ++++++++++++++++++++++
++ test/test_request_invalid.rb               | 28 +++++++++++
++ 5 files changed, 111 insertions(+), 3 deletions(-)
++ create mode 100644 test/test_normalize.rb
++
++--- a/ext/puma_http11/org/jruby/puma/Http11.java
+++++ b/ext/puma_http11/org/jruby/puma/Http11.java
++@@ -99,6 +99,8 @@ public class Http11 extends RubyObject {
++             int bite = b.get(i) & 0xFF;
++             if(bite == '-') {
++                 b.set(i, (byte)'_');
+++            } else if(bite == '_') {
+++                b.set(i, (byte)',');
++             } else {
++                 b.set(i, (byte)Character.toUpperCase(bite));
++             }
++--- a/lib/puma/const.rb
+++++ b/lib/puma/const.rb
++@@ -244,6 +244,14 @@ module Puma
++     # header values can contain HTAB?
++     ILLEGAL_HEADER_VALUE_REGEX = /[\x00-\x08\x0A-\x1F]/.freeze
++ 
+++    # The keys of headers that should not be convert to underscore
+++    # normalized versions. These headers are ignored at the request reading layer,
+++    # but if we normalize them after reading, it's just confusing for the application.
+++    UNMASKABLE_HEADERS = {
+++      "HTTP_TRANSFER,ENCODING" => true,
+++      "HTTP_CONTENT,LENGTH" => true,
+++    }
+++
++     # Banned keys of response header
++     BANNED_HEADER_KEY = /\A(rack\.|status\z)/.freeze
++ 
++--- a/lib/puma/request.rb
+++++ b/lib/puma/request.rb
++@@ -318,6 +318,11 @@ module Puma
++     # compatibility, we'll convert them back. This code is written to
++     # avoid allocation in the common case (ie there are no headers
++     # with `,` in their names), that's why it has the extra conditionals.
+++    #
+++    # @note If a normalized version of a `,` header already exists, we ignore
+++    #       the `,` version. This prevents clobbering headers managed by proxies
+++    #       but not by clients (Like X-Forwarded-For).
+++    #
++     # @param env [Hash] see Puma::Client#env, from request, modifies in place
++     # @version 5.0.3
++     #
++@@ -326,23 +331,30 @@ module Puma
++       to_add = nil
++ 
++       env.each do |k,v|
++-        if k.start_with?("HTTP_") and k.include?(",") and k != "HTTP_TRANSFER,ENCODING"
+++        if k.start_with?("HTTP_") and k.include?(",") and !UNMASKABLE_HEADERS.key?(k)
++           if to_delete
++             to_delete << k
++           else
++             to_delete = [k]
++           end
++ 
+++          new_k = k.tr(",", "_")
+++          if env.key?(new_k)
+++            next
+++          end
+++
++           unless to_add
++             to_add = {}
++           end
++ 
++-          to_add[k.tr(",", "_")] = v
+++          to_add[new_k] = v
++         end
++       end
++ 
++       if to_delete
++         to_delete.each { |k| env.delete(k) }
+++      end
+++      if to_add
++         env.merge! to_add
++       end
++     end
++--- /dev/null
+++++ b/test/test_normalize.rb
++@@ -0,0 +1,57 @@
+++# frozen_string_literal: true
+++
+++require_relative "helper"
+++
+++require "puma/request"
+++
+++class TestNormalize < Minitest::Test
+++  parallelize_me!
+++
+++  include Puma::Request
+++
+++  def test_comma_headers
+++    env = {
+++      "HTTP_X_FORWARDED_FOR" => "1.1.1.1",
+++      "HTTP_X_FORWARDED,FOR" => "2.2.2.2",
+++    }
+++
+++    req_env_post_parse env
+++
+++    expected = {
+++      "HTTP_X_FORWARDED_FOR" => "1.1.1.1",
+++    }
+++
+++    assert_equal expected, env
+++
+++    # Test that the iteration order doesn't matter
+++
+++    env = {
+++      "HTTP_X_FORWARDED,FOR" => "2.2.2.2",
+++      "HTTP_X_FORWARDED_FOR" => "1.1.1.1",
+++    }
+++
+++    req_env_post_parse env
+++
+++    expected = {
+++      "HTTP_X_FORWARDED_FOR" => "1.1.1.1",
+++    }
+++
+++    assert_equal expected, env
+++  end
+++
+++  def test_unmaskable_headers
+++    env = {
+++      "HTTP_CONTENT,LENGTH" => "100000",
+++      "HTTP_TRANSFER,ENCODING" => "chunky"
+++    }
+++
+++    req_env_post_parse env
+++
+++    expected = {
+++      "HTTP_CONTENT,LENGTH" => "100000",
+++      "HTTP_TRANSFER,ENCODING" => "chunky"
+++    }
+++
+++    assert_equal expected, env
+++  end
+++end
++--- a/test/test_request_invalid.rb
+++++ b/test/test_request_invalid.rb
++@@ -216,4 +216,32 @@ class TestRequestInvalid < Minitest::Tes
++ 
++     assert_status data
++   end
+++
+++  def test_underscore_header_1
+++    hdrs = [
+++      "X-FORWARDED-FOR: 1.1.1.1",  # proper
+++      "X-FORWARDED-FOR: 2.2.2.2",  # proper
+++      "X_FORWARDED-FOR: 3.3.3.3",  # invalid, contains underscore
+++      "Content-Length: 5",
+++    ].join "\r\n"
+++
+++    response = send_http_and_read "#{GET_PREFIX}#{hdrs}\r\n\r\nHello\r\n\r\n"
+++
+++    assert_includes response, "HTTP_X_FORWARDED_FOR = 1.1.1.1, 2.2.2.2"
+++    refute_includes response, "3.3.3.3"
+++  end
+++
+++  def test_underscore_header_2
+++    hdrs = [
+++      "X_FORWARDED-FOR: 3.3.3.3",  # invalid, contains underscore
+++      "X-FORWARDED-FOR: 2.2.2.2",  # proper
+++      "X-FORWARDED-FOR: 1.1.1.1",  # proper
+++      "Content-Length: 5",
+++    ].join "\r\n"
+++
+++    response = send_http_and_read "#{GET_PREFIX}#{hdrs}\r\n\r\nHello\r\n\r\n"
+++
+++    assert_includes response, "HTTP_X_FORWARDED_FOR = 2.2.2.2, 1.1.1.1"
+++    refute_includes response, "3.3.3.3"
+++  end
++ end
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b98ff9f644068edaaa5cb805ab985185327b0158
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,165 @@@
++From ebe9db3929ab8299d19c8f5b41e8ef4f4b22fa58 Mon Sep 17 00:00:00 2001
++From: Nate Berkopec <nate.berkopec@gmail.com>
++Date: Wed, 27 May 2026 08:33:21 +0900
++Subject: [PATCH] 7.2.1 backport (#3947)
++
++* Limit and anchor PROXY protocol parsing
++
++(cherry picked from commit f1f37d5822aa8ffe23e7d0d16e9a1f3b0eaf9bfd)
++
++* Parse PROXY protocol only once per connection
++
++(cherry picked from commit 8310c17cd43784723ed41a94d2a747da256306de)
++---
++ lib/puma/client.rb       | 38 ++++++++++++++-------
++ lib/puma/const.rb        |  3 +-
++ test/test_puma_server.rb | 71 ++++++++++++++++++++++++++++++++++++++++
++ 3 files changed, 100 insertions(+), 12 deletions(-)
++
++--- a/lib/puma/client.rb
+++++ b/lib/puma/client.rb
++@@ -148,7 +148,7 @@ module Puma
++     def reset(fast_check=true)
++       @parser.reset
++       @read_header = true
++-      @read_proxy = !!@expect_proxy_proto
+++      @read_proxy = !!@expect_proxy_proto && @requests_served.zero?
++       @env = @proto_env.dup
++       @body = nil
++       @tempfile = nil
++@@ -196,20 +196,36 @@ module Puma
++     def try_to_parse_proxy_protocol
++       if @read_proxy
++         if @expect_proxy_proto == :v1
++-          if @buffer.include? "\r\n"
++-            if md = PROXY_PROTOCOL_V1_REGEX.match(@buffer)
++-              if md[1]
++-                @peerip = md[1].split(" ")[0]
+++          crlf_index = @buffer.index "\r\n"
+++
+++          unless crlf_index
+++            if "PROXY ".start_with? @buffer
+++              return false
+++            elsif @buffer.start_with? "PROXY "
+++              if @buffer.bytesize >= PROXY_PROTOCOL_V1_MAX_LENGTH
+++                raise ConnectionError, "PROXY protocol v1 line is too long"
++               end
++-              @buffer = md.post_match
+++              return false
++             end
++-            # if the buffer has a \r\n but doesn't have a PROXY protocol
++-            # request, this is just HTTP from a non-PROXY client; move on
+++
++             @read_proxy = false
++-            return @buffer.size > 0
++-          else
++-            return false
+++            return true
+++          end
+++
+++          if @buffer.start_with?("PROXY ") && crlf_index + 2 > PROXY_PROTOCOL_V1_MAX_LENGTH
+++            raise ConnectionError, "PROXY protocol v1 line is too long"
+++          end
+++
+++          if md = PROXY_PROTOCOL_V1_REGEX.match(@buffer)
+++            if md[1]
+++              @peerip = md[1].split(" ")[0]
+++            end
+++            @buffer = md.post_match
++           end
+++          # if the buffer has a \r\n but doesn't have a PROXY protocol
+++          # request, this is just HTTP from a non-PROXY client; move on
+++          @read_proxy = false
+++          return @buffer.size > 0
++         end
++       end
++       true
++--- a/lib/puma/const.rb
+++++ b/lib/puma/const.rb
++@@ -255,6 +255,7 @@ module Puma
++     # Banned keys of response header
++     BANNED_HEADER_KEY = /\A(rack\.|status\z)/.freeze
++ 
++-    PROXY_PROTOCOL_V1_REGEX = /^PROXY (?:TCP4|TCP6|UNKNOWN) ([^\r]+)\r\n/.freeze
+++    PROXY_PROTOCOL_V1_REGEX = /\APROXY (?:TCP4|TCP6|UNKNOWN) ([^\r]+)\r\n/.freeze
+++    PROXY_PROTOCOL_V1_MAX_LENGTH = 107
++   end
++ end
++--- a/test/test_puma_server.rb
+++++ b/test/test_puma_server.rb
++@@ -1065,6 +1065,75 @@ EOF
++     assert_equal 'fd00::1', remote_addr
++   end
++ 
+++  def test_proxy_protocol_rejects_line_without_crlf_at_max_length
+++    server_run(remote_address: :proxy_protocol, remote_address_proxy_protocol: :v1) do
+++      [200, {}, ["Hello"]]
+++    end
+++
+++    socket = new_connection
+++    socket << "PROXY #{'A' * (Puma::Const::PROXY_PROTOCOL_V1_MAX_LENGTH - "PROXY ".bytesize)}"
+++
+++    assert_equal "", socket.read
+++  end
+++
+++  def test_proxy_protocol_allows_non_proxy_requests_over_max_length
+++    server_run(remote_address: :proxy_protocol, remote_address_proxy_protocol: :v1) do
+++      [200, {}, ["Hello"]]
+++    end
+++
+++    response = send_http_and_read( "GET /#{'a' * Puma::Const::PROXY_PROTOCOL_V1_MAX_LENGTH} HTTP/1.0\r\n\r\n")
+++
+++    assert_match %r{\AHTTP/1\.[01] 200 OK}, response
+++    assert_match %r{Hello\z}, response
+++  end
+++
+++  def test_proxy_protocol_ignores_embedded_proxy_line_in_http_body
+++    server_run(remote_address: :proxy_protocol, remote_address_proxy_protocol: :v1) do |env|
+++      body = env['rack.input'].read
+++      [200, {'Content-Length' => body.bytesize.to_s}, [body]]
+++    end
+++
+++    body = "prefix\nPROXY TCP4 1.1.1.1 2.2.2.2 3 4\r\nsuffix"
+++    response = send_http_and_read ("POST / HTTP/1.1\r\nHost: test.com\r\nContent-Length: #{body.bytesize}\r\n\r\n#{body}")
+++
+++    assert_match %r{\AHTTP/1\.[01] 200 OK}, response
+++    assert_match %r{#{Regexp.escape(body)}\z}, response
+++  end
+++
+++  def test_proxy_protocol_only_parses_first_request_on_connection
+++    server_run(remote_address: :proxy_protocol, remote_address_proxy_protocol: :v1) do |env|
+++      [200, {}, [env["REMOTE_ADDR"]]]
+++    end
+++
+++    socket = send_proxy_v1_http("GET /one HTTP/1.1\r\nHost: test.com\r\n\r\n", "1.2.3.4")
+++
+++    assert_equal ["HTTP/1.1 200 OK", "Content-Length: 7"], header(socket)
+++    assert_equal "1.2.3.4", socket.read(7)
+++
+++    sleep 1
+++
+++    socket << "PROXY TCP4 127.0.0.1 127.0.0.1 10000 80\r\nGET /two HTTP/1.1\r\nHost: test.com\r\nConnection: close\r\n\r\n"
+++
+++    assert_match %r{\AHTTP/1\.[01] 400 Bad Request}, socket.read
+++  end
+++
+++  def test_proxy_protocol_allows_proxy_http_method_on_keep_alive
+++    server_run(remote_address: :proxy_protocol, remote_address_proxy_protocol: :v1, supported_http_methods: :any) do |env|
+++      [200, {}, [env["REMOTE_ADDR"]]]
+++    end
+++
+++    socket = send_proxy_v1_http("GET /one HTTP/1.1\r\nHost: test.com\r\n\r\n", "1.2.3.4")
+++
+++    assert_equal ["HTTP/1.1 200 OK", "Content-Length: 7"], header(socket)
+++    assert_equal "1.2.3.4", socket.read(7)
+++
+++    socket << "PROXY /two HTTP/1.1\r\nHost: test.com\r\nConnection: close\r\n\r\n"
+++
+++    response = socket.read
+++    assert_match %r{\AHTTP/1\.1 200 OK\r\n}, response
+++    assert_equal "1.2.3.4", response.split("\r\n").last
+++  end
+++
++   # To comply with the Rack spec, we have to split header field values
++   # containing newlines into multiple headers.
++   def assert_does_not_allow_http_injection(app, opts = {})
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..78c27939b36eeb29dffc43725262690a0a87417b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,649 @@@
++Description: ssl certs for testcases
++Author: Abhijith PA <abhijith@debian.org>
++Forwarded: not-needed
++Last-Update: 2026-10-07
++
++--- puma-5.6.5.orig/examples/puma/cert_puma.pem
+++++ puma-5.6.5/examples/puma/cert_puma.pem
++@@ -1,21 +1,21 @@
++ -----BEGIN CERTIFICATE-----
++ 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
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/ca.crt
+++++ puma-5.6.5/examples/puma/client-certs/ca.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDDjCCAfagAwIBAgIBAzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjAw
++-ODAxMDAwMDAwWhcNMjQwODAxMDAwMDAwWjA4MRMwEQYKCZImiZPyLGQBGRYDbmV0
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjYx
+++MDAxMDAwMDAwWhcNMzAxMDAxMDAwMDAwWjA4MRMwEQYKCZImiZPyLGQBGRYDbmV0
++ MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwggEiMA0GCSqGSIb3
++-DQEBAQUAA4IBDwAwggEKAoIBAQDIHxrFcS2JkRQbXLFosb32unVkVuwHSPSt6Dpl
++-2jUQHP/bceAx/d9waHYf8rlbCFAIoduZDOc7XCJUidgcG5NfLJyQpkkWOU8CGWH+
++-Ipl4AE8auYCcy/0T7BQqaRC41HPmrJG1CC40rqcY47lUO2haI+vj5TZFHNhAbRat
++-rR1iD1veis2gBZtrMzd4IlpvEHGv6ghfnSc20za4exmapjp/uAAIOXpeFX8QHumA
++-bty4dd+iHpKjDzUrhG9Qa5v28ii2K1AcbczUQ7FzSp2/GoRSjF+WY6i86N9Z1M97
++-2PEgy0IG5l6JHu1P0/rd00hN0h0Owzv3V5ldMLZap7+pVFQTAgMBAAGjIzAhMA8G
+++DQEBAQUAA4IBDwAwggEKAoIBAQC1P8p5V+jPPJOVDlCQmaGkVe9i3uJpuZxBdvyT
+++71O/8uMuosJN1lq1s5dL2/eh+9rjjMHQrO/RuB3VCkWRNsbNq8bHDOPIIXiVOAPK
+++2tLI+58OFX904+uf+3ySGLMwQDPR52ov/ArCx28a/L5hg4tf/boXBdeOtfZvuCp0
+++GvdI0LYNeR26M28FsUFmH7PsbLRnNbq6hynayrMCipYQkavM2FuKPDtIg5OYFlHG
+++4bamXTRG+VmH6qdTY825al8+04Uuom9kx6Fg1Ee/+mD5lqXlKo/BxO6UhRiZwrTf
+++l/EBicxdc2aLyY5zVAtDY6VVDOTHj3oZkjwWgV0ytcpi8f63AgMBAAGjIzAhMA8G
++ A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IB
++-AQA3GWpy4bYLOHLENDTUBeclF6cDdYiautD6gxd1SDLMWOhAUF7ywwT87OAJdr1I
++-+W1TUv5BRG21rNm1QsZfLbStdKA1mpiET/9nYN7m1YauL5hI3yD49TGuO9/sxcE5
++-zNW7D3VBVNq+pyT21/TvLAgxCNvjjm7byzyIOcoRUyZx8WhCf8nUT6cEShXqEg4Q
++-iUBSLI38tiQoZneuVzDRlXBY0PqoB19l2Kg9yThHjPTVhw5EAQSDKXCCvaxAbVw6
++-ZPLNnOdK6DvqEZ3GC5WlaHQdmLxmN4OfV6AEtpgqgGY9u8K1ylTr3ET7xLK7bhcA
++-oZsggEVZr1Ifx9BWIazRNwlw
+++AQB3E+f+miY+Fu4IOoXe9b2/mP+S0IzvGTXEtKnOG3n24B1SLGMSr1HcyUySI8n/
+++qwwONSUfL8kGWintY8gTAlHhVjdW8gTLXVGMV9aYexxcojycta4MqM60uRMunBD3
+++CGjP45pd76sJsJ0paZMrdqjjMYYPHxI8sau3VQbKZ96DeTWvrEOGm6xQtQ5qbFQy
+++ZjEFZmy72N/Occ421IprCGOkuuV24q9sgWssOHF6/nbRdsJMXlxGtCXSq8YM5SEn
+++3YReyODq2foayZOmOR1VTR4JMJnlB9b36WbjkTz8jQGcHqKqzwXUEFgdywOxZaZ3
+++saaKCW4MbsGrqXEAck5iK35K
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/ca.key
+++++ puma-5.6.5/examples/puma/client-certs/ca.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client.crt
+++++ puma-5.6.5/examples/puma/client-certs/client.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDBDCCAeygAwIBAgIBCzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjAw
++-ODAxMDAwMDAwWhcNMjQwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjYx
+++MDAxMDAwMDAwWhcNMzAxMDAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
++ MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN
++-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoywLJRT7wZM1P3Abg9NIT+NJ8TkS
++-IBz8ZgyyhSW1lU/tcsNEJakIl22XAeLEHfMknMzDqvU1G256hqM+/Tgohreat+yc
++-ofy+2OOu4un+44qIGX82i2PCt+afVvbGhPpHioyAJRDXZd9V4FtESH+6As7m+6MH
++-E4yX547E6XmmJ9lp8z9FnBMi1a6C01bI6mZhMuReLl2bS0FWjqrwNN3PpizBD+Vv
++-FbUIndC+UiD0kYPxTwSDCpEq/To0FrNCdAj94Y4oZVuvx8B1mHiqwkqmlOLUZslS
++-u7CFInqbswq5LnGFRIVSg3bu4bgCbCEmJhfqxp5MODT4VBXa2sCOnG7BBwIDAQAB
++-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAApaKvnGiRqs
++-Vz4B06f/mDLmN7gb0e/evEypB2S06fp9f/oWWHXHCxpx9bKbiHFNNiinoc97/Spb
++-GzylHV/n9j8GEtZmJMiSJZubN8vpn1Jg0Usz3ZtAy0fe9ephjBIXPpwrsGF6Oz3u
++-U/b2zTpJX3oJ3Eq6Q9hLplYU3bNHfrw6PAbzbB91zVTFsqZUTctKrMRgp68FA4fw
++-VWQkb4QwLK1UVJIT/nR3v7nJDktgpR4mfdrtWbWxOGm/ed2oOilpqVhVN99P+bUn
++-3cFkQ6PSYK8En9jJhBMe/zQqpSyy09Tfi/Zy6nzZv0ah53bpeCFLZFi+0CU8HwPr
++-MuD1XQN72zg=
+++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlfZAk/6RuOY5RI4uzGfTNTr4AVpO
+++2Xqw1HVOZcojQmUqUBKxIkmk75Rlbh4HO7ORnfXDUYTogVEcgbOtPDN3PNkBgA/J
+++lelbJl7gklNDYs3aK70KFKe5YVgONPUuzg9jwpwK/K+iCOCh2ynXq/QAzJk7K7ad
+++fdAQGtiHnGKWO085jmOPIuPmjcf393VUKnhC2B+dsThalii2OjKI95vhxVohqyPk
+++MGk7EquEwQE1yKG0+WUw6qJ8KigQeiN0rKX8F4Zw582e1j2K7zQqWOJu1YD0UVch
+++Q8YQRxH29r2hwkZph7xY4L+pH7knLDJkrIamDzkBM1YIRVLZw9HVoNcAWwIDAQAB
+++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAHMqrcsyYja9
+++kzBjXMp6bIEWpHGQOBoFUZMV9xGtsCWOXt179s5suPi3cnayIlIy0/kGECtd7Vbi
+++YZGlNhnmAg1nr3nEa3mvXWgIdOwjhKiIxZGUgZ4QG9kniXoRQR5y5t5tINipuf0c
+++thg2JpTDrtckgdMvaT/rs/9W0SQP7EhW6JXxTUHNtTQRnx8Yhb8iNdil42cZUUzf
+++O7UUzHnxIr9cH5NnNVzz5SEXYdQSIAvhVppg3C7NSOMfe4djqd79oojjymXpws37
+++qKfbSQey8GJR7IrcAbt5Dpw7RsvPsYr0gTILyakyoqO0sNzP2GWT2ysivM0QQQov
+++2TwZyRM05pc=
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client.key
+++++ puma-5.6.5/examples/puma/client-certs/client.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client_expired.crt
+++++ puma-5.6.5/examples/puma/client-certs/client_expired.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDBDCCAeygAwIBAgIBFzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMTkw
++-ODAxMDAwMDAwWhcNMjAwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjUx
+++MDAxMDAwMDAwWhcNMjYxMDAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
++ MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN
++-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoywLJRT7wZM1P3Abg9NIT+NJ8TkS
++-IBz8ZgyyhSW1lU/tcsNEJakIl22XAeLEHfMknMzDqvU1G256hqM+/Tgohreat+yc
++-ofy+2OOu4un+44qIGX82i2PCt+afVvbGhPpHioyAJRDXZd9V4FtESH+6As7m+6MH
++-E4yX547E6XmmJ9lp8z9FnBMi1a6C01bI6mZhMuReLl2bS0FWjqrwNN3PpizBD+Vv
++-FbUIndC+UiD0kYPxTwSDCpEq/To0FrNCdAj94Y4oZVuvx8B1mHiqwkqmlOLUZslS
++-u7CFInqbswq5LnGFRIVSg3bu4bgCbCEmJhfqxp5MODT4VBXa2sCOnG7BBwIDAQAB
++-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAHDfDovSTCmM
++-sxDCfTGQUYwnvOohTP0hjUHB6BzNAPVKYoBiq064m/JoDFmOGGtF3CqhWqtE2psl
++-eOK8fA/QomyFaIAowhx8qrswMP7T/rRldAG+9QHBYZGkPtbB8evK6XqrMEQTf2Ux
++-FlN3p7BZl9rhtuManMb+Wud3HfLYjXn2nTRvkOTi93MP05Vrho8KegZ9Kj4wY1rK
++-gOnkbI6bv+1r9yjsZuUKPH/OjFkpmAoOab5hX5R5CmEefGAet2KPCNrApuwfvRHT
++-x9jVwtOYBHq3DVcBDBu+O38L+WlKGeXvUK4AzvxQaVUysCG3DA1zrvyI3Y8Jy2Jk
++-KfmWZWlvXlM=
+++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlfZAk/6RuOY5RI4uzGfTNTr4AVpO
+++2Xqw1HVOZcojQmUqUBKxIkmk75Rlbh4HO7ORnfXDUYTogVEcgbOtPDN3PNkBgA/J
+++lelbJl7gklNDYs3aK70KFKe5YVgONPUuzg9jwpwK/K+iCOCh2ynXq/QAzJk7K7ad
+++fdAQGtiHnGKWO085jmOPIuPmjcf393VUKnhC2B+dsThalii2OjKI95vhxVohqyPk
+++MGk7EquEwQE1yKG0+WUw6qJ8KigQeiN0rKX8F4Zw582e1j2K7zQqWOJu1YD0UVch
+++Q8YQRxH29r2hwkZph7xY4L+pH7knLDJkrIamDzkBM1YIRVLZw9HVoNcAWwIDAQAB
+++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAELNjE/D13Ya
+++8DznEAMiGA7+66nK6F4GVlj8BOagpty8rb0TqNP0l5MGH+r5WtoSs+UMuoezb3VP
+++A+LZg8fr0EJClvK4GFRpp6sRQxJmeXYSN+2VTUJFwkvhxeOEGFGFHkCn78ByBpxK
+++XDwvytxkyZUzzis2EMvk93h5s2pD36xaITJ+O5tn3d7bsls9877Q93bRLRdfniow
+++d3VnQmOT4nSPAZ/dne3IS4Pi+YD/QtYQyLh2tERwXtoBkzzolWKSAmUDmR13ltAp
+++bHrbh02GJjZgjf5BWSQuBIST+b1tGoMCGXY6fFxHPVL2HSo8obzA4R0uLTup4mXx
+++i5z+vwqMdQw=
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client_expired.key
+++++ puma-5.6.5/examples/puma/client-certs/client_expired.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client_unknown.crt
+++++ puma-5.6.5/examples/puma/client-certs/client_unknown.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDBTCCAe2gAwIBAgIBEzANBgkqhkiG9w0BAQsFADA5MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTIw
++-MDgwMTAwMDAwMFoXDTI0MDgwMTAwMDAwMFowPzETMBEGCgmSJomT8ixkARkWA25l
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI2
+++MTAwMTAwMDAwMFoXDTMwMTAwMTAwMDAwMFowPzETMBEGCgmSJomT8ixkARkWA25l
++ dDEUMBIGCgmSJomT8ixkARkWBHB1bWExEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIw
++-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKQo9ve3XI5fiKE5AKI3Qm7aeGwy
++-uIR5RBo58Na4saBSfCaKZvNwzuEimKN6S4ShUlV0egKwCs/KvzbhQJpIxVsLQCGs
++-AQDxdOGP1FyizQvzDhzL7BC2I/Dp3A5V6uXkxo1qTqoBdTYeJ/mdIVgZ7bgTnUdu
++-uY9KErU/ugR8MbqZyQel/04PSmkCTdhzP41w0xvmc7Jgab0vJ0oXU4knXIyKsLeq
++-BkL6fevPW4fdaU+ppXBvpsgWfACk/WZs+DyhPndcX7JNrcnYIIAJy75wivqw2RDB
++-m59XNhoDwbR21EkcZnlQL59pv4ASA7DrJs+tFoGqsCs7DyEioePNp6ZraSkCAwEA
++-AaMSMBAwDgYDVR0PAQH/BAQDAgSwMA0GCSqGSIb3DQEBCwUAA4IBAQBMbPmIekCi
++-TMLtclXtkhKUefb9hoALhABwRbTbzPjz+MGJX2BMwLt8bAs6AMY8jEazvfm9+G0m
++-1liBAGWFojSzAykNIq/zAG2tgDVolQp3x4JcyFDJ0cuR8DIdll2CCnLM2jP8Nek8
++-wSyuWDsm1U5kmos/dP/ialCvvCLHULoSCBhsyBFKmH2ViXdW09Wg4jSQ4RIToBBn
++-w/VbObeKA8NBUW6/7w6MS1oeFL3PlZJ205zVrZ68nqm/ckYyaBAdlQNTmlThNSQ5
++-eL7w2QgfYDM72Sk4/rjZsW0kH+V0ZqmIuyVBE6jo5EulGPLo2eQEfPmhEdbo5rFi
++-foV+QKM8z3K0
+++DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkNySbzjqbbzIf0mDuksPz2vMnU
+++kTVupWI9Wl+jY3ndOOaBMYW9nRTU793WaT2cojGbHoM1Vsou+2rgh82ImEB8/iTs
+++Cc+ZhMDN14AdAMyhgTqDTWcMXtuNT3lICdsN30TJcZDnFgwgQcHGehHNYuFrh0Sg
+++6j5OAA6DC9JRU34qNUGwOl/n6PvWjLqKOxoKOJSlppzY16Wk46gqyGEttIZ+7N5j
+++SClwMcH8nelu92AvABcV910xiy3DIZNIn47r5J3fFDmeaEAttLWP6d77GY85gnkN
+++pXf/cgKZLbsCh4LB1GfhjtNFR0ShivXwabB3khQAhhSv8QzARZd5MVkdnH8CAwEA
+++AaMSMBAwDgYDVR0PAQH/BAQDAgSwMA0GCSqGSIb3DQEBCwUAA4IBAQBCXujxzfsv
+++PuVwIAIUyXcI1CBs7zJC1JfteyKpy81FZ4eU3OSO80cMXsgYrXgGhY6tBGt/5Pu5
+++29SUiACOjfURFYKkFYyJ2MelOAaq0C2BaQomgO1wTd/79B0XX+0noJOS8qgO/i25
+++mqByrafXqWa9eN8qczWXKHa6VcBoXuZo+30be5LrAEZGaWnYUVpEac3JqM9Ts12N
+++Svp0KJBxgSBwpYPQvLgVF/I09SkbIoY5dYSNX/FtzXhDLxjt7HC2RslK7Hid6C0f
+++lG5h0KYC30JQTjEaObBMHwYMXnw0hKS+aygH7Di2kvhriD8iHG2zi1431boDxeiP
+++E0XnJ5+AE8/a
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/client_unknown.key
+++++ puma-5.6.5/examples/puma/client-certs/client_unknown.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/client-certs/server.crt
+++++ puma-5.6.5/examples/puma/client-certs/server.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDBDCCAeygAwIBAgIBBzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjAw
++-ODAxMDAwMDAwWhcNMjQwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjYx
+++MDAxMDAwMDAwWhcNMzAxMDAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0
++ MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN
++-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXOg3gTrGJfVft9cSrfGRnEZezDB
++-L93fcLwJAoaXGxbEg1RW/fOrSpSNemuqOvbzczV7m5eYTf1lHPBJsndbYyijIR1+
++-Fp4tjFDp76SC3hxCIc3uYXIz0qQwSOAi1z15zobS4xF29jlsXWtfBl9fivjzdj/f
++-pbZ+JPYOrlcJAf6Xmr3xh//13rOI0ytBMlWf51z/iAZBLm2wvbt+nR7B6koAdTgM
++-Coe+gOtcLWYY5ApJ4qB9knGdxWoF5p7guHHw2aGTM0jyhgBowfVkFRiE2JUmODae
++-g+dHsd8ogWbqhGyZTredJF/NRrLKU0h+t7ldKHvXEZy4qyqQlvKoTpODqQIDAQAB
++-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAI/bcQP4Hu9O
++-OtaaIjVxN8+9jXUOrMpSogmZ4bRKImispt9SA+sbxec7iOMM2pG3Py2yi0hWGzii
++-hSebWIsM1JuPj7ks9l8nGRxpGeInJwTkJorG4ZLEypoS2wW3fQZGx3o4da5V+U2Z
++-HEY0wQTbPBqqnyeZ16ZFNVCzw8y9l7y7CEFjvUO3sq0pne9r7Z+XVgjGyBdBYkJS
++-0kcqPBXFCMHrWH5UlacYlM5cqgoVztOp2STGmR3XR7a34oueeA10QSP+jzeYvWA1
++-wTYA762uU2ReCdujfNbf8V1tZWAH36KldM3hhDNWeveAGxxj1h2R9T/k2kHl/a7D
++-I3VdS59vjJY=
+++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnihQ8P6kgn066bN+g+i76KYdFo9g
+++sHwmxYZrZroK8E496NptIpmFpRe7lwRQNcCVYVfi/tSCh/UgI5gD8isvMl6wj0aR
+++4RT+5xGmiql0J8yOqrIQh3pkWIEeH2Yj04IAS3fOLjEPzSKFRmk9ji3fzdOBM67E
+++FRX4ETU47zVRaQsLdFd/TkxZ0PNW4RC6U9YFtG157hPQZ+f4absQx83cI5aFCzSP
+++nsK5vQUK4hMP2fYyDaIDgiWtmDc+nHzrUfzs5tavxIqj2FDLucM9bln4XrdedOzL
+++Uun39J6Ywcz+VQPc02yR6zSFRsW5Q9RgloPMKFSa0kHvGxW0qSR1ckOFgQIDAQAB
+++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAELzAVm3cFIj
+++iQWCrhYdS1SBTeOZv4+bIuj+nmOSLcJbn5sGp3OStXXlYvZvxV7KveX1rfHonSSg
+++/fUFk+6jFZNfl0m7aqG2MbQ9xasva3SJI/jFapAqAiXVMXAfEBj36D9KJc5lHHTM
+++wxByYLtt3mxleunitpw7RbPbgu1ChNu480TNV3yk9iYzmTNaG24aZpd9wEIcrrNU
+++oxdE777aISQwFVa+5edsHkdZV4zQUOlTvitPkR9lO0Kh7jXGlqgFd1nMQ+aOMBdA
+++6D3NbkW93mTXIQA2rGEyasbUUZBVzplj1E9cqreLLqD9M7r5dQdEaxwqhjTLY+sG
+++0MG7o0Hfu4U=
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/server.key
+++++ puma-5.6.5/examples/puma/client-certs/server.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/client-certs/unknown_ca.crt
+++++ puma-5.6.5/examples/puma/client-certs/unknown_ca.crt
++@@ -1,19 +1,19 @@
++ -----BEGIN CERTIFICATE-----
++ MIIDEDCCAfigAwIBAgIBETANBgkqhkiG9w0BAQsFADA5MRMwEQYKCZImiZPyLGQB
++-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTIw
++-MDgwMTAwMDAwMFoXDTI0MDgwMTAwMDAwMFowOTETMBEGCgmSJomT8ixkARkWA25l
+++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI2
+++MTAwMTAwMDAwMFoXDTMwMTAwMTAwMDAwMFowOTETMBEGCgmSJomT8ixkARkWA25l
++ dDEUMBIGCgmSJomT8ixkARkWBHB1bWExDDAKBgNVBAMMA0NBVTCCASIwDQYJKoZI
++-hvcNAQEBBQADggEPADCCAQoCggEBAJXBTI7itz3JCkNRpR3Jdas/HK2+WLoy3cck
++-taH0OUHPxSEDteNCRlwR07cEWThl6QMQROHEJLCVPIjCLXmu2uwJ6SjPb7keRXJb
++-mOHWo0ZXyc0xnLIv8anWXFAlMconvtpSoYgyNUFwYQdhWTv3I9HrdqCrez70+DXy
++-q3gsTgvixwUIUm+/kWs6zfIHCtwiAusM2Xjrc9Aa/+5JTa3rsdXUXxyrakoKr2ED
++-0BrhWRmopM+xf7V42dNpwuFnrtqDfmyPKtzZbv5J8w6oq7BGC2+CL7MYo1fnonWP
++-kxRZCYzp/qtkhotHHypnpZuQh2puOwnisGykA8rSX/hltCklx5ECAwEAAaMjMCEw
+++hvcNAQEBBQADggEPADCCAQoCggEBALIp4dTrRiijv2sILN7SgCAR3bOdWzCL/Yew
+++AplM1qkwPB0KYa+6dXndtxVb5TdV5P83t74evZ7wHfPbdvDKgpIPDsjgbRd8O1i0
+++9Itp9iUv6BpErqThtM0SPqcvr5dHlZStjvOzbDWApv5S1usgcnDRxNObYGPQ2MTK
+++0OgpflMkPCVvFX05DEP2BPXmJOLfWVHSHPKYfl0lba7tTbTa74xhiULhgS7wCL7X
+++UVHY6RlzfLGrA5B9TL6xsWPX+WUYUbuD9mxeCtxyXnNGjXAfzW37swEteJXxtHCP
+++8BwJ9afz6wp0vLeniOIpSKNWrAtOhtqZrg0i/wo+z4llX9DzVjkCAwEAAaMjMCEw
++ DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQAD
++-ggEBAFH23fStJpmaYUwqIhuWfId4a75eJvp5zpedU4e9Adl+a87u+iNrppa34fPs
++-Ni1XhrGYbh4gTSRmy39R1JW3O5LUDJ6LlDkZOgduiMyLvVksmD70MPuyaBrPmIWE
++-mauOzk3TtvKI4+wBEzLAdYUhliAtMyRJaUN5Bbe+q3P9tL7Hsh9uKusJ5jyMetI7
++-8lLZqKHvE4MDV3AqS6OLLlTC1WdTKR9fqdHYwyh8+DFMBm7PuZjFP9tjDiQwhfEX
++-zbj9J8ba94BA8jmh3Z8a/S0rzcF33KPn+DWyrnyLWWSWKTLHN9TpVHRlhQ4OEOYZ
++-LVu0+VBx8eIwdLZplDfQ9sGUjCs=
+++ggEBAGrpVgbp+YSXCBX7KnNe3fpBFOEPJECvI0XzFTNKeYCm8R6I3Qmketel3TxZ
+++1Ff7yjZxvdIl51Xw41yC5aSCWDhxh4YkzvgOdCOexWsHUt2LGDQptSnyKCC28syz
+++WP4lCwneVdzEVrorNDEnPQ/sYMhdYp5QD7u/enUnyDvAu5licur/m0sWPlpRasE7
+++/bcJr/Pa3mGC4iXZ0gauK8i0M4B/3HVm6gL7TOCJImV4aQ7CyDXqK+FJLO+sjcOI
+++GXuJf/YLjIvhZarRccW1bDt5AbKudgzXGTjXDGC40uahaPJZMLm9jundBbGD1mPW
+++JGDp4c/0dMVyKK3MMiEn6QQvDT0=
++ -----END CERTIFICATE-----
++--- puma-5.6.5.orig/examples/puma/client-certs/unknown_ca.key
+++++ puma-5.6.5/examples/puma/client-certs/unknown_ca.key
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-MIIEowIBAAKCAQEAlcFMjuK3PckKQ1GlHcl1qz8crb5YujLdxyS1ofQ5Qc/FIQO1
++-40JGXBHTtwRZOGXpAxBE4cQksJU8iMItea7a7AnpKM9vuR5FcluY4dajRlfJzTGc
++-si/xqdZcUCUxyie+2lKhiDI1QXBhB2FZO/cj0et2oKt7PvT4NfKreCxOC+LHBQhS
++-b7+RazrN8gcK3CIC6wzZeOtz0Br/7klNreux1dRfHKtqSgqvYQPQGuFZGaikz7F/
++-tXjZ02nC4Weu2oN+bI8q3Nlu/knzDqirsEYLb4IvsxijV+eidY+TFFkJjOn+q2SG
++-i0cfKmelm5CHam47CeKwbKQDytJf+GW0KSXHkQIDAQABAoIBAAHmslIeDrV6F+dC
++-4hW+uP+zjWmnQPkcLDSbArNLpm5vdNE2etinvrzsfQOVyowsvwiK7FTxaIXVXy9d
++-R7aDwcO9XHhoKcLv33HUN9ymHOyHsMgqGRMqCKdfUUyzLC6k0odzBRn1iTeLda/i
++-TH+2Y34GvzrK8oWaFoyYyBR+e38rHOMBF5gmQSkwHZ+8qOsHuI7ajukLioRXLElq
++-ivrOdeaiNmTfofXiDakZm5/SKJ2pXbzQkeibqLkTXeU/p3ltjVrg0GbgF1l5SjmK
++-OyFUeTRjmA8KAFpPri2WggZ6rW9N58u7iF1+hIxRua42lHQ3UXvza41cLX0IjxkT
++-dL0e5QECgYEAxC7kswPej/Omo8T0hZtWHAB6eyas43VzCyypdrDKyfKJGbVWBC61
++-YsOI7L2K1biKsx7gyidOVlNdp3ycmgyyBuH4vn8UhEzOpLLnEw1HX9KDfKQL9yjG
++-f7GYUiHIOE1ah0X45PMpuk/FI0JvFdQCG3MKe7ypM7h2QV2wSM43n3cCgYEAw2p0
++-Dc8AmkEIOP2ZtB4jadD/XTZpxotd6rqZkGt0YWW4fkzdJGjeDhs+W4pT6tG85fFW
++-Bmxz80YsbG9ktHiUTZAS89ixxUnmecudsp4xlTGsGaIboQLPwST8S7iA2AXq0fgW
++-rZX/OiKM+IVbszBWrVpCNHKGPnfiO6PE3GiU4zcCgYBZXTcGKIQQNJ+6x/POjIS7
++-+qfQQzzL2+tMssp662tkdFtpX4XQH+q2E3XiyTBdzFM55p3k1+TCQ/VMXuIC9jd+
++-FR82vzJ8VXRn56qEri7OAlmsxBlDO8q3zhEhkIvgwbO0HPaUbAOc/8tAFXn+inVv
++-RYcH+Fdm3ObZPbEYaP9DXwKBgF14JqiQMbaWkotH6eP4YnHzsKFyLGf2M2bZ+CfW
++-7eTEVdm7hC8tJcFTkKESag8wYQ0PQVlzOIbNMuRu55lW74CmABq4tFcsgNwS44wT
++-FJ5LEwlzu4lpIdw9h5vkVWR+eBIUeyxuSZUR/6HDj9gGr/7c5DvX55QrnX9vVvMh
++-5s1DAoGBAICs0BjCHmAOcEXIHzt3gTju6oj2sQ/Fob03XsEKcfR6Ci32sBQekdqA
++-rpkNiJKzrHjo79nDDcioXGvDD5Duv0fTxFmYME2lTm6nvKS8QF4b+K8C/UKzhpmt
++-zAvwVTOtLnMpHNcKvadSPKFMWNl8M12oi8ELGGPouuh24zX4eyAe
+++MIIEpAIBAAKCAQEAsinh1OtGKKO/awgs3tKAIBHds51bMIv9h7ACmUzWqTA8HQph
+++r7p1ed23FVvlN1Xk/ze3vh69nvAd89t28MqCkg8OyOBtF3w7WLT0i2n2JS/oGkSu
+++pOG0zRI+py+vl0eVlK2O87NsNYCm/lLW6yBycNHE05tgY9DYxMrQ6Cl+UyQ8JW8V
+++fTkMQ/YE9eYk4t9ZUdIc8ph+XSVtru1NtNrvjGGJQuGBLvAIvtdRUdjpGXN8sasD
+++kH1MvrGxY9f5ZRhRu4P2bF4K3HJec0aNcB/NbfuzAS14lfG0cI/wHAn1p/PrCnS8
+++t6eI4ilIo1asC06G2pmuDSL/Cj7PiWVf0PNWOQIDAQABAoIBABATRdhhiyDHF5In
+++eG75dMyP+B5I/C2e7/cCe1WMMJEu9DmVkndZ3lgq2GZhtoad5i3d/+L0YJ0a4sT6
+++QBrdVtcpaybWUxmLoMox95+tpaM41ZsrJ8viPp9DPmp028XNVHKID24vOfwA2fB4
+++FoK8GH9T+guyyQlwkmJ9P0i3V7nWFDj1/vRpo+lfyEm7FXU0oftU/lp5LjyysXKy
+++v9Vt4Ugpjw25XJPjD7TsjTNysBoXTmR+xp5tiWQv7rRL4H+3eCxBDn8xzZVQthIp
+++6gJhHpdBlCUB8uiISVG2+cUl0TB8SwRZuSznupZLBsJZP0yUX22lr+PxuhRlCtF5
+++kWsGm7UCgYEA583dFZzngw1aH8P4hgGSXpJXzPrfeuJq8AFcq9dFAcUN6AU+iuq1
+++ZlAYxEYvVdkzF/h8EsaW1YZPWSuPvllf2rr3jEUxphe0iH9juQm/HODsTyGdMluN
+++YxjCfJltnhKNAbEDxwZ3RVdl/+Av9mAVDpf5Ngi3/2DOC1ADTPsmgwUCgYEAxMKq
+++sNa22SnOvwr4bL7bhenfhb/UmoAGJjXBRShU+E7GRSft0s9YA+rXnKnTb95sz/e+
+++pTv4M6yRR0sZn8tg2GwnNROEM13VRdZGSXYTljlCi22dBxNoxcG6DokiH5JOraoQ
+++NeDxxXONlpuaZxmq1MPOlarA/5d4AkA6btl6lKUCgYBvg7HgO+OEQGAi9/wPO6JW
+++rMBgdDAexd38KCuU37Lq7wmJnTxBSDiMR+wiQEF1Y1AZMAlAXxkhD8QMedBlGknq
+++yBde+8quxKitIduvoOi309zbFKizGSgjjD3EA2ugp/v93FKc5JdsXGdNeWSZeg+n
+++PaU+QWODD+cPuiZcWlZkoQKBgQCfORC77eUls0lVG+GQzpoCshFpwKShKjzPquxt
+++tIeeMNENoZQ45gVJlj9Izb0GaC4R1V/3gqIF3v3pfYKM5x3FxS+tKc/vaV1vGEjk
+++paKQDGInRlquISzF61FO9fYhKlp0+owHrbK4oBvR5rV5/TFa3+FLCFUKAF7jI2ql
+++zWP+6QKBgQCtQzcwp3cf+/MPycimNeePSKXXbl3zIASzBxNKW/dooROeqKySyfDn
+++DxlhgeDUpWeBWZ5O1w4HFgRukjV8PnGNwDMOYQi2PLw8n3jK3xuSV5GVN2A92tMa
+++BUY9ZvrQGh6CdJpJ8nsgi3OBwukPh6nRQ3R4f8BIwLx8/Vnv+JfAdQ==
++ -----END RSA PRIVATE KEY-----
++--- puma-5.6.5.orig/examples/puma/puma_keypair.pem
+++++ puma-5.6.5/examples/puma/puma_keypair.pem
++@@ -1,27 +1,27 @@
++ -----BEGIN RSA PRIVATE KEY-----
++-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
++ -----END RSA PRIVATE KEY-----
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2e02e41cdcfcc4735bcb27a4a258ed62a59aea2f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,10 @@@
++0004-puma.gemspec-drop-git-usage.patch
++0011-disable-minitest-extensions.patch
++0012-disable-cli-ssl-tests.patch
++0013-fix-test-term-not-accepts-new-connections.patch
++0014-disable-test-failing-on-amd64.patch
++CVE-2023-40175.patch
++CVE-2024-21647.patch
++CVE-2024-45614.patch
++CVE-2026-47736_37.patch
++new-certs-generated.patch
diff --cc debian/puma.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..47a94c33a1b68656703ddacb43251e743af42fab
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,165 @@@
++.TH PUMA "1" "January 2020" "PUMA 3.12" "User Commands"
++
++.SH NAME
++puma \- fast, concurrent web server for ruby and rack
++
++.SH USAGE
++.BI "puma [options...]" " [rackup file]"
++.PP
++.B puma [\-h | \-\-help | \-V | \-\-version]
++
++.SH OPTIONS
++.PP
++The following options are available:
++.TP
++.BI "\-b, \-\-bind " URI
++URI to bind to (tcp://, unix://, ssl://).
++.TP
++.BI "\-C, \-\-config " PATH
++Load given path as a config file.
++.TP
++.BI "\-\-control " URL
++DEPRECATED alias for \fB\-\-control\-url\fR.
++.TP
++.BI "\-\-control\-token " TOKEN
++The \fITOKEN\fR to use as authentication for the control server.
++.TP
++.BI "\-\-control\-url " URL
++The bind \fIURL\fR to use for the control server and app. Use \fIauto\fR to
++use a temp unix server. This requires to use a \fB\-\-control\-token\fR, which
++needs to be given with every request to the control server (\fItoken=foo\fR).
++.TP
++.B \-d, \-\-daemon
++Demonize the server into the background.
++.TP
++.B \-\-debug
++Show low level debugging information.
++.TP
++.BI "\-\-dir " DIR
++Change to given directory before starting.
++.TP
++.BI "\-e, \-\-environment " ENVIRONMENT
++The environment to run the Rack app on. Default \fIdevelopment\fR.
++.TP
++.BI "\-I, \-\-include " PATH
++Specify \fB$LOAD_PATH\fR directories.
++.TP
++.BI "\-p, \-\-port " PORT
++Define the TCP port to bind to. Use \fB\-b\fR for more advanced options.
++.TP
++.BI "\-\-pidfile " PATH
++Use the given path as PID file.
++.TP
++.B \-\-preload
++Preload the application. This loads all the application code prior to forking.
++Preloading reduces total memory usage of an application and is only available
++in cluster mode.
++.TP
++.B \-\-prune\-bundler
++Prune out the bundler env if possible.
++.TP
++.B \-q, \-\-quiet
++Do not log requests internally. Default: \fItrue\fR.
++.TP
++.B \-v, \-\-log-requests
++Log requests as they occur.
++.TP
++.BI "\-R, \-\-restart\-cmd " CMD
++The \fBpuma\fR command to run during a hot restart. Default: \fIinferred\fR.
++.TP
++.BI "\-S, \-\-state " PATH
++Where to store the state details.
++.TP
++.BI "\-t, \-\-threads " INT
++Min:max threads to use. Puma will automatically scale the number of threads,
++from the minimum until it caps out at the maximum, based on how much traffic
++is present. Default: \fI0:16\fR.
++.TP
++.B \-\-tcp\-mode
++Run the app in raw TCP mode instead of HTTP mode.
++.TP
++.B \-\-early-hints
++Enable early hints support.
++.TP
++.BI "\-w, \-\-workers " COUNT
++Activate cluster mode and define number of worker processes to create. In this
++mode workers are forked from a master process. Each child process still has
++its own thread pool and the \fB\-t\fR setting is per worker.
++.TP
++.BI "\-\-tag " NAME
++Additional text to display in process listing.
++.TP
++.BI "\-\-redirect\-stdout " FILE
++Redirect \fBSTDOUT\fR to a specific file.
++.TP
++.BI "\-\-redirect\-stderr " FILE
++Redirect \fBSTDERR\fR to a specific file.
++.TP
++.B \-\-[no\-]redirect\-append
++Append to redirected files.
++.TP
++.B \-h, \-\-help
++Show help.
++.TP    
++.B \-V, \-\-version
++Print the version information.
++
++.SH EXAMPLES
++.PP
++The following examples show how to bind TCP or sockets:
++.PP
++Bind Puma to a socket with the -b (or --bind) flag:
++.RS
++.B puma -b tcp://127.0.0.1:9292
++.RE
++.PP
++To use a UNIX Socket instead of TCP:
++.RS
++.B puma -b unix:///var/run/puma.sock
++.RE
++.PP
++To change the permissions of the UNIX socket, add a umask parameter:
++.RS
++.B puma -b 'unix:///var/run/puma.sock?umask=0111'
++.RE
++.PP
++In need of a bit of security use SSL sockets:
++.RS
++.B puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
++.RE
++.PP
++The following example show how to Create a control server and use
++.BR pumactl (1)
++to interact with the control server to restart \fBpuma\fR.
++.RS
++.B puma --control-url tcp://127.0.0.1:9293 --control-token foo
++.br
++.B pumactl --control-url 'tcp://127.0.0.1:9293' --control-token foo restart
++.RE
++.PP
++
++.SH "CONFIGURATION FILE"
++.B puma
++will look for a configuration file at \fIconfig/puma.rb\fR. If an environment
++is specified, either via the \fB\-e\fR and \fB\-\-environment\fR flags, or
++through the \fIRACK_ENV\fR or the \fIRAILS_ENV\fR environment variables, it
++looks for configuration at \fIconfig/puma/<environment_name>.rb\fR.
++.PP
++The \fB\-C\fR flag allows one to pass on a custom configuration location. If
++the value specified is a dash (\fI\-\fR) \fBpuma\fR won't look for any
++configuration file:
++.PP
++.RS
++.B puma -C \(dq\-\(dq
++.RE
++
++.SH "SEE ALSO"
++.PP
++There is extensive documentation at <\%https://puma.io/puma/\%> and
++<\%https://github.com/puma/puma\%>.
++
++.SH AUTHOR
++.PP
++This manual page was written by \fBDaniel Leidert\fP
++<\%dleidert@debian\.org\%>, for the Debian GNU/Linux system (but may be used by
++others).
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b43bf86b50fd8d3529a0dc062c30006ed38f309e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++README.md
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e39721e20f0708703dc6d9b607634636d625e9b2
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++examples/*
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c5391cac0970dafb41d6fed6cd6b3baa0d92d183
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# this is one of several sub-directories; no need to rename it
++repeated-path-segment puma usr/share/doc/puma/examples/puma/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c9bff2ddcf4b70f1131daa3f6bad795cd4ab6525
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++debian/puma.1
++debian/pumactl.1
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..67e70d67360abba841fc52c5fa025e374cbe8ef8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,99 @@@
++.TH PUMA "1" "January 2020" "PUMA 3.12" "User Commands"
++
++.SH NAME
++pumactl \- command line client for puma
++
++.SH USAGE
++.B pumactl [options...] [commands]
++.PP
++.B pumactl [\-h | \-\-help | \-V | \-\-version]
++
++.SH COMMANDS
++.TP
++.B halt
++Halt the server.
++.TP
++.B restart
++Restart the server.
++.TP
++.B phased-restart
++Restart server but phase out old workers while starting new workers one at a
++time.
++.TP
++.B start
++Start the server.
++.TP
++.B stats
++Show stats about the server.
++.TP
++.B status
++Show server status.
++.TP
++.B stop
++Stop server.
++.TP
++.B reload-worker-directory
++Reload the worker directory.
++.TP
++.B gc
++Start garbage collector.
++.TP
++.B gc-stats
++Show information about garbage collector.
++
++.SH OPTIONS
++.PP
++The following options are available:
++.TP
++.BI "\-F, \-\-config\-file " PATH
++Load given path as a config file.
++.TP
++.BI "\-T, \-\-control\-token " TOKEN
++The \fITOKEN\fR to use as authentication for the control server.
++.TP
++.BI "\-C, \-\-control\-url " URL
++The bind \fIURL\fR to use for the control server and app. Use \fIauto\fR to
++use a temp unix server. This requires to use a \fB\-\-control\-token\fR, which
++needs to be given with every request to the control server (\fItoken=foo\fR).
++.TP
++.BI "\-p, \-\-pid " PID
++Define the TCP port to bind to. Use \fB\-b\fR for more advanced options.
++.TP
++.BI "\-P, \-\-pidfile " PATH
++Use the given path as PID file.
++.TP
++.B \-Q, \-\-quiet
++Don't display messages.
++.TP
++.BI "\-S, \-\-state " PATH
++Where the state file is.
++.TP
++.B \-H, \-\-help
++Show help.
++.TP    
++.B \-V, \-\-version
++Print the version information.
++
++.SH EXAMPLES
++Create a control server and use
++.BR pumactl (1)
++to interact with the control server to restart \fBpuma\fR.
++.RS
++.B puma --control-url tcp://127.0.0.1:9293 --control-token foo
++.br
++.B pumactl --control-url 'tcp://127.0.0.1:9293' --control-token foo restart
++.RE
++.PP
++
++.SH "SEE ALSO"
++.PP
++.BR puma (1)
++.PP
++There is extensive documentation at <\%https://puma.io/puma/\%> and
++<\%https://github.com/puma/puma\%>.
++
++.SH AUTHOR
++.PP
++This manual page was written by \fBDaniel Leidert\fP
++<\%dleidert@debian\.org\%>, for the Debian GNU/Linux system (but may be used by
++others).
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..412b8daeb1a9aa7c0d3dada301fe344fa1d08665
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,30 @@@
++require 'gem2deb/rake/testtask'
++
++Gem2Deb::Rake::TestTask.new do |t|
++  t.libs = ['test']
++  if ENV['AUTOPKGTEST_TEST_PUMA_SERVER_SSL']
++    ENV['OPENSSL_CONF'] = '' # https://github.com/puma/puma/issues/2147
++    t.test_files = FileList['test/test_*_ssl.rb']
++  else
++    t.test_files = FileList['test/**/*_test.rb'] + FileList['test/**/test_*.rb'] - FileList[
++      'test/test_*ssl.rb',
++      'test/test_integration_systemd.rb',
++      'test/test_integration_cluster.rb',
++      'test/test_integration_pumactl.rb',
++      'test/test_worker_gem_independence.rb',
++      'test/test_preserve_bundler_env.rb',
++      'test/test_request_invalid.rb',
++      'test/test_busy_worker.rb',
++    ]
++  end
++  t.verbose = true
++end.tap do |t|
++  exclude = %w[
++    test_application_logs_are_flushed_on_write
++    test_hot_restart_does_not_drop_connections
++    test_logs_all_localhost_bindings
++    test_multiple_requests_waiting_on_less_busy_worker
++    test_term_not_accepts_new_connections
++  ]
++  t.options << ' ' << "-e'/" << exclude.join('|') << "/'"
++end
diff --cc debian/rules
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..fef8de6dc29d8e3156b6eee83ae875b87d0332cb
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,12 @@@
++#!/usr/bin/make -f
++
++export GEM2DEB_TEST_RUNNER = --check-dependencies
++export DH_RUBY = --gem-install
++export DH_RUBY_GEM_INSTALL_EXCLUDE = benchmarks/* docs/* win_gem_test/* tools/* bin/puma-wild
++export LANG = C.UTF-8
++
++%:
++      dh $@ --buildsystem=ruby --with ruby
++
++override_dh_installchangelogs:
++      dh_installchangelogs History.md
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..33c3a640d2a84306b6a8b5640692ac3481739e65
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++---
++include:
++  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
++  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..163aaf8d82b6c54f23c45f32895dbdfdcc27b047
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++3.0 (quilt)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..362d49eeddf78b4541c161f629ae876d5bff7729
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++# no signed tarballs by upstream
++puma source: debian-watch-does-not-check-gpg-signature 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e4c5aad223c00acb48a945fd3b78df3f5889af52
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++Test-Command: export AUTOPKGTEST_TEST_PUMA_SERVER_SSL=1 && gem2deb-test-runner --check-dependencies --autopkgtest
++Depends: @, @builddeps@
++Restrictions: allow-stderr
++Features: test-name=ssl
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5d1f0b9af5bb4b161c4ac5ca8d2348a96de29490
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,7 @@@
++---
++Archive: GitHub
++Bug-Database: https://github.com/puma/puma/issues
++Bug-Submit: https://github.com/puma/puma/issues
++Changelog: https://github.com/puma/puma/tags
++Repository: https://github.com/puma/puma.git
++Repository-Browse: https://github.com/puma/puma
diff --cc debian/watch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5ce4047618bab10f2ce23a932276c016a133e889
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++version=4
++opts="searchmode=plain, \
++  filenamemangle=s/.+\/v@ANY_VERSION@/@PACKAGE@-$1\.tar\.gz/" \
++https://api.github.com/repos/puma/puma/releases \
++https://api.github.com/repos/puma/puma/tarball/v@ANY_VERSION@